const { body, query } = require("express-validator");
const { id, pageno, pagesize } = require("../common");

const title = (optional = false) => {
    if (optional) {
        return body("title")
            .optional()
            .trim()
            .notEmpty()
            .withMessage("标题不能为空")
            .bail()
            .isLength({ min: 3, max: 20 })
            .withMessage("标题长度必须在3-20个字符之间");
    } else {
        return body("title")
            .trim()
            .notEmpty()
            .withMessage("标题不能为空")
            .bail()
            .isLength({ min: 3, max: 20 })
            .withMessage("标题长度必须在3-20个字符之间");
    }
};

const imageUrl = (optional = false) => {
    if (optional) {
        return body("imageUrl")
            .optional()
            .trim()
            .notEmpty()
            .withMessage("图片不能为空");
    } else {
        return body("imageUrl").trim().notEmpty().withMessage("图片不能为空");
    }
};

const targetUrl = (optional = false) => {
    if (optional) {
        return body("targetUrl")
            .optional()
            .trim()
            .notEmpty()
            .withMessage("跳转链接不能为空");
    } else {
        return body("targetUrl")
            .trim()
            .notEmpty()
            .withMessage("跳转链接不能为空");
    }
};

const order = (optional = false) => {
    if (optional) {
        return body("order")
            .optional()
            .trim()
            .notEmpty()
            .withMessage("排序不能为空")
            .bail()
            .isNumeric()
            .withMessage("排序必须是数字");
    } else {
        return body("order")
            .trim()
            .notEmpty()
            .withMessage("排序不能为空")
            .bail()
            .isNumeric()
            .withMessage("排序必须是数字");
    }
};

const isActive = body("isActive")
    .optional()
    .trim()
    .notEmpty()
    .withMessage("是否启用不能为空")
    .bail()
    .isBoolean()
    .withMessage("是否启用只能是布尔值");

module.exports = {
    add: [title(), imageUrl(), targetUrl()],
    delete: [id],
    update: [
        id,
        isActive,
        order(true),
        title(true),
        imageUrl(true),
        targetUrl(true)
    ]
};
